home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / ToolbarSearchEntry.py < prev    next >
Text File  |  2009-10-19  |  7KB  |  205 lines

  1. ## This code was translated to python from the original C version in
  2. ## Rhythmbox. The original authors are:
  3.  
  4. ## Copyright (C) 2002 Jorn Baayen <jorn@nl.linux.org>
  5. ## Copyright (C) 2003 Colin Walters <walters@verbum.org>
  6.  
  7. ## Further modifications by:
  8.  
  9. ## Copyright (C) 2008 Rui Matos <tiagomatos@gmail.com>
  10.  
  11. ## Copyright (C) 2009 Red Hat, Inc.
  12. ## Author: Tim Waugh <twaugh@redhat.com>
  13.  
  14. ## This program is free software; you can redistribute it and/or modify
  15. ## it under the terms of the GNU General Public License as published by
  16. ## the Free Software Foundation; either version 2 of the License, or
  17. ## (at your option) any later version.
  18.  
  19. ## This program is distributed in the hope that it will be useful,
  20. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22. ## GNU General Public License for more details.
  23.  
  24. ## You should have received a copy of the GNU General Public License
  25. ## along with this program; if not, write to the Free Software
  26. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  27.  
  28. import gobject
  29. import gtk
  30. import HIG
  31. from gettext import gettext as _
  32.  
  33. class ToolbarSearchEntry (gtk.HBox):
  34.     __gproperties__ = {
  35.         'search_timeout' : (gobject.TYPE_UINT,
  36.                             'search timeout',
  37.                             'search signal rate limiter (in ms)',
  38.                             0,
  39.                             5000,
  40.                             300,
  41.                             gobject.PARAM_READWRITE)
  42.         }
  43.  
  44.     __gsignals__ = {
  45.         'search' : (gobject.SIGNAL_RUN_LAST,
  46.                     gobject.TYPE_NONE,
  47.                     [ gobject.TYPE_STRING ]),
  48.         'activate' : (gobject.SIGNAL_RUN_LAST,
  49.                       gobject.TYPE_NONE,
  50.                       [])
  51.         }
  52.  
  53.     def __init__ (self):
  54.         self.entry = None
  55.         self.timeout = 0
  56.         self.is_a11y_theme = False
  57.         self.search_timeout = 300
  58.         self.menu = None
  59.  
  60.         gtk.HBox.__gobject_init__ (self)
  61.         self.set_spacing (HIG.PAD_NORMAL)
  62.         self.set_border_width (HIG.PAD_NORMAL)
  63.  
  64.         settings = gtk.settings_get_for_screen (self.get_screen ())
  65.         theme = settings.get_property ('gtk-theme-name')
  66.         self.is_a11y_theme = theme == 'HighContrast' or theme == 'LowContrast'
  67.  
  68.         label = gtk.Label ()
  69.         label.set_text_with_mnemonic (_("_Filter:"))
  70.         label.set_justify (gtk.JUSTIFY_RIGHT)
  71.         self.pack_start (label, False, True, 0)
  72.  
  73.         self.entry = gtk.Entry()
  74.         if gtk.__dict__.has_key ('ENTRY_ICON_PRIMARY'):
  75.             # We have primary/secondary icon support.
  76.             self.entry.set_icon_from_stock (gtk.ENTRY_ICON_PRIMARY,
  77.                                             gtk.STOCK_FIND)
  78.             self.entry.set_icon_from_stock (gtk.ENTRY_ICON_SECONDARY,
  79.                                             gtk.STOCK_CLEAR)
  80.  
  81.             self.entry.set_icon_sensitive (gtk.ENTRY_ICON_SECONDARY, False)
  82.             self.entry.set_icon_activatable (gtk.ENTRY_ICON_SECONDARY, False)
  83.  
  84.         label.set_mnemonic_widget (self.entry)
  85.  
  86.         self.pack_start (self.entry, True, True, 0)
  87.  
  88.         self.entry.connect ('changed', self.on_changed)
  89.         self.entry.connect ('focus_out_event', self.on_focus_out_event)
  90.         self.entry.connect ('activate', self.on_activate)
  91.         self.entry.connect ('icon-press', self.on_icon_press)
  92.  
  93.     def do_get_property (self, property):
  94.         if property.name == 'search_timeout':
  95.             return self.search_timeout
  96.         else:
  97.             raise AttributeError, 'unknown property %s' % property.name
  98.  
  99.     def do_set_property (self, property, value):
  100.         if property.name == 'search_timeout':
  101.             self.search_timeout = value
  102.         else:
  103.             raise AttributeError, 'unknown property %s' % property.name
  104.  
  105.     def clear (self):
  106.         if self.timeout != 0:
  107.             gobject.source_remove (self.timeout)
  108.             self.timeout = 0
  109.  
  110.         self.entry.set_text ("")
  111.  
  112.     def get_text (self):
  113.         return self.entry.get_text ()
  114.  
  115.     def set_text (self, text):
  116.         self.entry.set_text (text)
  117.  
  118.     def check_style (self):
  119.         if self.is_a11y_theme:
  120.             return
  121.  
  122.         bg_colour = gtk.gdk.color_parse ('#f7f7be') # yellow-ish
  123.         fg_colour = gtk.gdk.color_parse ('#000000') # black
  124.  
  125.         text = self.entry.get_text ()
  126.         if len (text) > 0:
  127.             self.entry.modify_text (gtk.STATE_NORMAL, fg_colour)
  128.             self.entry.modify_base (gtk.STATE_NORMAL, bg_colour)
  129.         else:
  130.             self.entry.modify_text (gtk.STATE_NORMAL, None)
  131.             self.entry.modify_base (gtk.STATE_NORMAL, None)
  132.  
  133.         self.queue_draw ()
  134.  
  135.     def on_changed (self, UNUSED):
  136.         self.check_style ()
  137.  
  138.         if self.timeout != 0:
  139.             gobject.source_remove (self.timeout)
  140.             self.timeout = 0
  141.  
  142.            # emit it now if we have no more text
  143.         has_text = self.entry.get_text_length () > 0
  144.         if has_text:
  145.             self.timeout = gobject.timeout_add (self.search_timeout,
  146.                                                 self.on_search_timeout)
  147.         else:
  148.             self.on_search_timeout ()
  149.  
  150.         if gtk.__dict__.has_key ("ENTRY_ICON_PRIMARY"):
  151.             self.entry.set_icon_sensitive (gtk.ENTRY_ICON_SECONDARY, has_text)
  152.             self.entry.set_icon_activatable (gtk.ENTRY_ICON_SECONDARY, has_text)
  153.  
  154.     def on_search_timeout (self):
  155.         self.emit ('search', self.entry.get_text ())
  156.         self.timeout = 0
  157.  
  158.         return False
  159.  
  160.     def on_focus_out_event (self, UNUSED_widget, UNUSED_event):
  161.         if self.timeout == 0:
  162.             return False
  163.  
  164.         gobject.source_remove (self.timeout)
  165.         self.timeout = 0
  166.  
  167.         self.emit ('search', self.entry.get_text ())
  168.  
  169.         return False
  170.  
  171.     def searching (self):
  172.         return self.entry.get_text () != ''
  173.  
  174.     def on_activate (self, UNUSED_entry):
  175.         self.emit ('search', self.entry.get_text ())
  176.  
  177.     def grab_focus (self):
  178.         self.entry.grab_focus ()
  179.  
  180.     def set_drop_down_menu (self, menu):
  181.         if not gtk.__dict__.has_key ("ENTRY_ICON_PRIMARY"):
  182.             return
  183.  
  184.         if menu:
  185.             self.entry.set_icon_sensitive (gtk.ENTRY_ICON_PRIMARY, True)
  186.             self.entry.set_icon_activatable (gtk.ENTRY_ICON_PRIMARY, True)
  187.             self.menu = menu
  188.         else:
  189.             self.entry.set_icon_sensitive (gtk.ENTRY_ICON_PRIMARY, False)
  190.             self.entry.set_icon_activatable (gtk.ENTRY_ICON_PRIMARY, False)
  191.             self.menu = None
  192.  
  193.     def on_icon_press (self, UNUSED, icon_position, event):
  194.         if icon_position == gtk.ENTRY_ICON_SECONDARY:
  195.             self.set_text ("")
  196.             return
  197.  
  198.         if icon_position == gtk.ENTRY_ICON_PRIMARY:
  199.             if not self.menu:
  200.                 return
  201.  
  202.             self.menu.popup (None, None, None, event.button, event.time)
  203.  
  204. gobject.type_register (ToolbarSearchEntry)
  205.